{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>test1</th>\n",
       "      <th>test2</th>\n",
       "      <th>pass</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.051267</td>\n",
       "      <td>0.69956</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.092742</td>\n",
       "      <td>0.68494</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.213710</td>\n",
       "      <td>0.69225</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.375000</td>\n",
       "      <td>0.50219</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.183760</td>\n",
       "      <td>0.93348</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      test1    test2  pass\n",
       "0  0.051267  0.69956     1\n",
       "1 -0.092742  0.68494     1\n",
       "2 -0.213710  0.69225     1\n",
       "3 -0.375000  0.50219     1\n",
       "4  0.183760  0.93348     0"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#加载数据\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "data = pd.read_csv('chip_test.csv')\n",
    "data.head() #数据预览"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0       True\n",
      "1       True\n",
      "2       True\n",
      "3       True\n",
      "4      False\n",
      "       ...  \n",
      "113    False\n",
      "114    False\n",
      "115    False\n",
      "116    False\n",
      "117    False\n",
      "Name: pass, Length: 118, dtype: bool\n"
     ]
    }
   ],
   "source": [
    "#添加标签\n",
    "mask = data.loc[:,'pass'] == 1 \n",
    "print(mask)#预览1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#可视化数据\n",
    "%matplotlib inline \n",
    "from matplotlib import pyplot as plt\n",
    "fig1 = plt.figure()\n",
    "passed = plt.scatter(data.loc[:,'test1'][mask],data.loc[:,'test2'][mask])\n",
    "failed = plt.scatter(data.loc[:,'test1'][~mask],data.loc[:,'test2'][~mask]) #这里的~mask是取反，可以理解为0\n",
    "plt.title('test1-test2')\n",
    "plt.xlabel('test1')\n",
    "plt.ylabel('test2')\n",
    "plt.legend((passed,failed),('passed','failed'))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "           X1        X2      X1_2      X2_2     X1_X2\n",
      "0    0.051267  0.699560  0.002628  0.489384  0.035864\n",
      "1   -0.092742  0.684940  0.008601  0.469143 -0.063523\n",
      "2   -0.213710  0.692250  0.045672  0.479210 -0.147941\n",
      "3   -0.375000  0.502190  0.140625  0.252195 -0.188321\n",
      "4    0.183760  0.933480  0.033768  0.871385  0.171536\n",
      "..        ...       ...       ...       ...       ...\n",
      "113 -0.720620  0.538740  0.519293  0.290241 -0.388227\n",
      "114 -0.593890  0.494880  0.352705  0.244906 -0.293904\n",
      "115 -0.484450  0.999270  0.234692  0.998541 -0.484096\n",
      "116 -0.006336  0.999270  0.000040  0.998541 -0.006332\n",
      "117  0.632650 -0.030612  0.400246  0.000937 -0.019367\n",
      "\n",
      "[118 rows x 5 columns]\n"
     ]
    }
   ],
   "source": [
    "#将数据赋值给相关变量\n",
    "X = data.drop(['pass'],axis=1)\n",
    "y = data.loc[:,'pass']\n",
    "X1 = data.loc[:,'test1']\n",
    "X2 = data.loc[:,'test2']\n",
    "X1.head()\n",
    "#创建新数据\n",
    "X1_2 = X1*X1\n",
    "X2_2 = X2*X2\n",
    "X1_X2 = X1*X2\n",
    "X_new = {'X1':X1,'X2':X2,'X1_2':X1_2,'X2_2':X2_2,'X1_X2':X1_X2}\n",
    "X_new = pd.DataFrame(X_new)\n",
    "print(X_new)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# 二阶线性边界"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression()"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#创建并训练模型\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "LR1 = LogisticRegression()\n",
    "LR1.fit(X_new,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8135593220338984\n"
     ]
    }
   ],
   "source": [
    "#评估模型\n",
    "from sklearn.metrics import accuracy_score\n",
    "y1_predict = LR1.predict(X_new)\n",
    "accuracy1 = accuracy_score(y,y1_predict)\n",
    "print(accuracy1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pandas\\core\\series.py:679: RuntimeWarning: invalid value encountered in sqrt\n",
      "  result = getattr(ufunc, method)(*inputs, **kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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ujB06FAArrrqKqZMmUKPHj2477772L9/Pzt37uSEE05gxIgR9O/fnyuvvJLRo0czevRoAIYOHcoPf/hDrrzySi655BKKioqYNWsWs2bNYtCgQQCUlZWxatUq9u7dy8UXX0zTpk0BGDlyZEplr2E1EGOyQTY11zlo4+7yhLYnovaQWRHhxhtv5Nlnn2XJkiV873vfOzwn47XXXuOmm25iwYIFnHTSSRw6dIiJEyfy+OOPU15ezimnnMKKFStQVe644w4WLVrEokWLWL16Nddee23U53OCBRBjskE2Ndc5qFNhQULbE/Hll18yd+5cAP7+979z+umnA9C2bVvKysp49tlnAaiurmb9+vWcffbZ3HfffezevZuysjI+//xz+vXrx+23305xcTErVqzg/PPPZ9q0aZSVlQGwYcMGtm7dyrBhw3jhhRcoLy9n7969vPLKKymXH6wJy5jskS3NdQ667fxe3PH8kiOasQrycrnt/F4pP3bv3r156qmnuP766+nZsyc33HADu3btol+/fnTv3p3BgwcDUFVVxVVXXUVpaSmqyq233kphYSE//elPefvtt8nNzaVPnz4MHz6cJk2asHz5ck499VQAmjdvzl//+ldOPPFEvvOd7zBw4EC6devGGWeckXL5AaSmlz8bFBcXqy0oZUx2W758Ob179477+BcXbuD+mSvZuLucToUF3HZ+r5T7P9atW8c3v/lNli5dmtLjuCHa+yMiC1S1uPaxvtZARGQa8E1gq6r2jbJfgAeBC4H9wDWq+nF43wXhfbnA46o62bOCZ5LF00NDOUtLQh2q59xlV6n1sfcr64we1DnlgJGp/O4DeRK4oJ79w4Ge4Z9xwB8BRCQXeDi8vw8wRkT6uFrSTJSNk8tSmY2dje+XcUX37t0DWftIlK8BRFXnADvrOWQU8GcN+QAoFJGOwBBgtaquUdWDwDPhY00ism1yWaoBINveL2Ma4HcNpCGdgcjB6yXhbbG21yEi40RkvojM37Ztm2sFTUvZNrks1QCQbe+XMQ0IegCJNnBZ69led6PqVFUtVtXidu3aOVq4tBewXFBupIw4QqoBIGDvlzF+C3oAKQG6RNwvAjbWs90kIkCTy9xMGXFYqgEgQO+XMUEQ9ADyMvBfEnIKUKqqm4B5QE8R6SEijYHLw8eaRARocll9KSMck2oACND7ZdLflClT6N27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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "X1_new = X1.sort_values()\n",
    "theta0 = LR1.intercept_\n",
    "theta1,theta2,theta3,theta4,theta5 = LR1.coef_[0][0],LR1.coef_[0][1],LR1.coef_[0][2],LR1.coef_[0][3],LR1.coef_[0][4]\n",
    "a = theta4\n",
    "b = theta5*X1_new+theta2\n",
    "c = theta0+theta1*X1_new+theta3*X1_new*X1_new\n",
    "#边界函数 二阶\n",
    "X2_new_boundary = (-b+np.sqrt(b*b-4*a*c))/(2*a)\n",
    "\n",
    "fig2 = plt.figure()\n",
    "passed=plt.scatter(data.loc[:,'test1'][mask],data.loc[:,'test2'][mask])\n",
    "failed=plt.scatter(data.loc[:,'test1'][~mask],data.loc[:,'test2'][~mask])\n",
    "plt.plot(X1_new,X2_new_boundary)\n",
    "plt.title('test1-test2')\n",
    "plt.xlabel('test1')\n",
    "plt.ylabel('test2')\n",
    "plt.legend((passed,failed),('passed','failed'))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# 以函数方式求解边界函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "112   -0.83007\n",
       "86    -0.75518\n",
       "84    -0.74366\n",
       "111   -0.72638\n",
       "113   -0.72062\n",
       "        ...   \n",
       "70     0.89804\n",
       "65     0.92684\n",
       "68     0.93836\n",
       "67     0.96141\n",
       "101    1.07090\n",
       "Name: test1, Length: 118, dtype: float64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = np.array(b*b-4*a*c)\n",
    "#d = (-b+np.sqrt(b*b-4*a*c))/(2*a)\n",
    "X1_new\n",
    "#print(np.array(d))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([0.1212617]), array([0.04679448]), array([0.02697935]), array([0.00872189]), array([-0.00830576]), array([-0.00830576]), array([-0.11718731]), array([-0.16040224]), array([-0.18016521]), array([-0.18965258]), array([-0.21671004]), array([-0.22530078]), array([-0.23369452]), array([-0.2499261]), array([-0.28761583]), array([-0.30846849]), array([-0.32171919]), array([-0.32816104]), array([-0.33448523]), array([-0.34069505]), array([-0.35278365]), array([-0.35866807]), array([-0.37013014]), array([-0.42186137]), array([-0.42656594]), array([-0.43119936]), array([-0.43574686]), array([-0.44021779]), array([-0.45318277]), array([-0.47336128]), array([-0.47336128]), array([-0.48465118]), array([-0.48828317]), array([-0.49185073]), array([-0.49185073]), array([-0.51193977]), array([-0.51193977]), array([-0.5181489]), array([-0.52412149]), array([-0.52986615]), array([-0.52986615]), array([-0.53264971]), array([-0.54066023]), array([-0.54572074]), array([-0.55055962]), array([-0.55055962]), array([-0.55518131]), array([-0.56170859]), array([-0.56775529]), array([-0.56775529]), array([-0.58002265]), array([-0.58002265]), array([-0.58588805]), array([-0.59313744]), array([-0.59416537]), array([-0.59514154]), array([-0.59852963]), array([-0.60052615]), array([-0.60280757]), array([-0.60310565]), array([-0.60354216]), array([-0.60379456]), array([-0.60355793]), array([-0.60282483]), array([-0.60105947]), array([-0.60105947]), array([-0.60047489]), array([-0.59135016]), array([-0.59135016]), array([-0.59009769]), array([-0.5887809]), array([-0.58285568]), array([-0.58285568]), array([-0.57390312]), array([-0.56073894]), array([-0.55572236]), array([-0.53219481]), array([-0.52181028]), array([-0.51814159]), array([-0.51814159]), array([-0.50647589]), array([-0.48925514]), array([-0.47987024]), array([-0.46991909]), array([-0.45383618]), array([-0.42349291]), array([-0.40276684]), array([-0.38769565]), array([-0.3714656]), array([-0.353902]), array([-0.34523055]), array([-0.33477608]), array([-0.33477608]), array([-0.32451646]), array([-0.26416907]), array([-0.26416907]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan])] [array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([0.41115349]), array([0.47870382]), array([0.49620931]), array([0.51216114]), array([0.52688317]), array([0.52688317]), array([0.61731967]), array([0.65131207]), array([0.66646378]), array([0.67364552]), array([0.69378609]), array([0.7000712]), array([0.70615931]), array([0.71777963]), array([0.74393719]), array([0.75787296]), array([0.76651241]), array([0.77064862]), array([0.77466719]), array([0.77857137]), array([0.78604871]), array([0.7896275]), array([0.79647831]), array([0.82515323]), array([0.82755217]), array([0.82987596]), array([0.83211783]), array([0.83428312]), array([0.84033121]), array([0.84898157]), array([0.84898157]), array([0.85335458]), array([0.85468094]), array([0.85594286]), array([0.85594286]), array([0.86219812]), array([0.86219812]), array([0.86379599]), array([0.86515732]), array([0.86628671]), array([0.86628671]), array([0.86676464]), array([0.86785827]), array([0.86830752]), array([0.86853594]), array([0.86853594]), array([0.86854596]), array([0.86815595]), array([0.86728536]), array([0.86728536]), array([0.86341226]), array([0.86341226]), array([0.86005458]), array([0.85346939]), array([0.85219128]), array([0.85086182]), array([0.84502699]), array([0.84010621]), array([0.83085948]), array([0.82885193]), array([0.82467718]), array([0.81801268]), array([0.81085516]), array([0.80320517]), array([0.79221728]), array([0.79221728]), array([0.78932708]), array([0.75714603]), array([0.75714603]), array([0.75358794]), array([0.74996551]), array([0.73481778]), array([0.73481778]), array([0.71433305]), array([0.68733509]), array([0.67770724]), array([0.63573465]), array([0.61843322]), array([0.61245891]), array([0.61245891]), array([0.59387632]), array([0.56742904]), array([0.55343288]), array([0.53887047]), array([0.51587067]), array([0.47399923]), array([0.44635628]), array([0.42667382]), array([0.40583252]), array([0.38365766]), array([0.37284469]), array([0.35992047]), array([0.35992047]), array([0.34735121]), array([0.27547567]), array([0.27547567]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan]), array([nan])]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:7: RuntimeWarning: invalid value encountered in sqrt\n",
      "  import sys\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:8: RuntimeWarning: invalid value encountered in sqrt\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "#定义一个函数f(x)\n",
    "#define f(x)\n",
    "def f(x):\n",
    "    a = theta4\n",
    "    b = theta5*x+theta2\n",
    "    c = theta0+theta1*x+theta3*x*x\n",
    "    #一个+ 一个 -\n",
    "    X2_new_boundary1 = (-b+np.sqrt(b*b-4*a*c))/(2*a)\n",
    "    X2_new_boundary2 = (-b-np.sqrt(b*b-4*a*c))/(2*a)\n",
    "    return X2_new_boundary1,X2_new_boundary2\n",
    "X2_new_boundary1 = [] #用这两个变量来存储test1对应的边界上的test2的值\n",
    "X2_new_boundary2 = []\n",
    "for x in X1_new:\n",
    "    X2_new_boundary1.append(f(x)[0]) #所求解的第一个数值，故它的索引为0\n",
    "    X2_new_boundary2.append(f(x)[1]) #所求解的第二个数值，故它的索引为1\n",
    "print(X2_new_boundary1,X2_new_boundary2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig3 = plt.figure()\n",
    "passed=plt.scatter(data.loc[:,'test1'][mask],data.loc[:,'test2'][mask])\n",
    "failed=plt.scatter(data.loc[:,'test1'][~mask],data.loc[:,'test2'][~mask])\n",
    "plt.plot(X1_new,X2_new_boundary1)\n",
    "plt.plot(X1_new,X2_new_boundary2)\n",
    "plt.title('test1-test2')\n",
    "plt.xlabel('test1')\n",
    "plt.ylabel('test2')\n",
    "plt.legend((passed,failed),('passed','failed'))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## 两段缝合\n",
    "图像断开是因为两段x1是缺了数,有间隔的\n",
    "直接补上\n",
    "生成个密集的X1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:7: RuntimeWarning: invalid value encountered in sqrt\n",
      "  import sys\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:8: RuntimeWarning: invalid value encountered in sqrt\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "X1_range = [-0.9 + x/10000 for x in range(0,20000)]\n",
    "X1_range = np.array(X1_range) #转换成数组\n",
    "X2_new_boundary1 = []\n",
    "X2_new_boundary2 = []\n",
    "for x in X1_range:\n",
    "    X2_new_boundary1.append(f(x)[0])\n",
    "    X2_new_boundary2.append(f(x)[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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PWKt80fiPKAQC7AyvdEX4jkzjAT4bVFUAKcC6xNsUwpEf9FTgb5x1tVARM4XkTIRKVu5cqVX8uY+hViAlemNvhDPmWEkwFdFoarrVXVdHZs1AaI18quBtnHW1T72WFXtqao9W7du7ZXIuU/ICrAmzS2nz5g32HXUFPqMeSM77RAyvdGH7JwZRtCEsY5iAxCtaGmKkzHWOiMZBlznCq6qE1ABlm+9czK90YfonBkBk6VOvOvWraN///6Ulpby3HPPxd3u0ksv3WZdKtlSo0ePZvr06WlIWJMw3nDnUOVa6g4sjrPOSIYQFWAl6p3jKZne6EN0zowAyWJSw7x58zj00EOZPn06J554Ytztbr/99oy/ywsCTY8VkX2A01W1eibTJGCmiLQDjgF6ARpjnZEsISnAymbvnBpE/9ZM0luDOmeWlhseEsW6Mvg/ueOOO3jooYdYu3Ytb731FuPHj+e8885j48aN7L777jz00EM/b1taWprQIvjhhx8488wzWbFiBfvttx933XUXa9as4ZRTTqGiogJV9aReIxCLQlVLI6//raUkUNX1uOD1u8ARqrou1jpfBTY8IV6PHC9652xDt+Fw2QIYvda95sLN1tJyw0WWkhp+97vfcfvttzNy5EimT5/O5s2bufjii3nttddYvHgx3377bdLHGjt2LF27duXNN9/km2++Yf78+YwdO5bBgwczbdo0iouLM5I1ShhdT6jqGlV9SlWXJ1pn+IgHvtps9s4JDC992JaWGy58SmooLi7mgQceYMSIEaxevZpNm5K3sBcuXMhzzz1HaWkpX375JeXl5SxatMiaAhpJ4uUNzKMn3aE92nPjsP1o37wEAdo3L+HGYfvl1MSwGnhtAVhabrjwKalh3LhxnHzyyUyYMIEmTeKWmMWkS5cuXHrppUyfPp0bbriBjh071mgK+OGHH3oio7XwyEe8Hofpoa92aI/2uasYauO1D3v7DhGlE2O94T9exLqS4Mgjj+Siiy7i3nvvBaC8vJxOnTolte95553HWWedxUMPPUSzZs14/PHHOf/88znllFN45pln2LJliycyWlPAfOT/usa54ezs/PWpMro5Lp+gNuJiAIWK1+eltoIH9wRrGVc1ySDgH4amgGEhlaaA5nrKR7x2YVgBWmy8Pi+Wlls3FvAPBFMU+YjXNzArQItNNs5LLmZr+YkHAf98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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# coding:utf-8\n",
    "import matplotlib as mlp\n",
    "mlp.rcParams['font.family'] = 'SimHei'\n",
    "mlp.rcParams['axes.unicode_minus'] = False\n",
    "fig4 = plt.figure()\n",
    "passed=plt.scatter(data.loc[:,'test1'][mask],data.loc[:,'test2'][mask])\n",
    "failed=plt.scatter(data.loc[:,'test1'][~mask],data.loc[:,'test2'][~mask])\n",
    "plt.plot(X1_range,X2_new_boundary1,'r')\n",
    "plt.plot(X1_range,X2_new_boundary2,'r')\n",
    "plt.title('test1-test2')\n",
    "plt.xlabel('测试1')\n",
    "plt.ylabel('测试2')\n",
    "plt.title('芯片质量预测')\n",
    "plt.legend((passed,failed),('passed','failed'))\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}